import torch

def evaluate_model(model, test_loader, device):
    """
    评估模型在测试集上的性能。

    Args:
    - model: 已训练好的模型。
    - test_loader: 测试数据加载器。
    - device: 模型运行的设备（CPU或GPU）。

    Returns:
    - accuracy: 模型在测试集上的准确率。
    """
    model.eval()  # 设置模型为评估模式
    correct = 0
    total = 0
    
    with torch.no_grad():  # 在评估模式下关闭梯度计算以节省内存和加速计算
        for inputs, labels in test_loader:
            inputs, labels = inputs.to(device), labels.to(device)
            outputs = model(inputs)  # 假设模型输出的是未经过softmax的logits
            _, predicted = torch.max(outputs.data, 1)  # 获取预测类别
            total += labels.size(0)
            correct += (predicted == labels).sum().item()
    
    accuracy = 100 * correct / total
    print(f'Accuracy of the model on the test images: {accuracy}%')
    return accuracy

# 假设你已经有了一个训练好的模型实例 `model` 和测试数据加载器 `test_loader`
# 以及模型运行的设备 `device`（例如 'cuda' 或 'cpu'）

# 在主程序中调用评估函数
if __name__ == "__main__":
    # 假设 device 已经被设置为 'cuda' 如果可用，否则为 'cpu'
    # model 是已经训练好的Transformer模型（或任何其他模型）
    # test_loader 是测试数据的DataLoader实例
    accuracy = evaluate_model(model, test_loader, device)
